package dominio;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import persistencia.PersistentObject;
import dto.ListaProveedorTO;
import dto.ProveedorTO;

@Entity
@Table(name = "Proveedor")
public class Proveedor extends PersistentObject {
	private static final long serialVersionUID = 1L;

	@Column(name = "cuil", nullable = false, columnDefinition = "varchar(32)")
	private String cuil;

	@Column(name = "razonSocial", nullable = false, columnDefinition = "varchar(32)")
	private String razonSocial;

	@OneToMany(cascade = CascadeType.ALL)
	@JoinColumn(name = "idProveedor")
	private List<ListaProveedor> listas;

	@Column(name = "activo", nullable = false, columnDefinition = "bit")
	private boolean activo;

	public Proveedor() {
		listas = new ArrayList<ListaProveedor>();
	}

	public String getCuil() {
		return cuil;
	}

	public void setCuil(String cuil) {
		this.cuil = cuil;
	}

	public String getRazonSocial() {
		return razonSocial;
	}

	public void setRazonSocial(String razonSocial) {
		this.razonSocial = razonSocial;
	}

	public List<ListaProveedor> getListas() {
		return listas;
	}

	public void agregarLista(ListaProveedor lista) {
		listas.add(lista);
	}

	public boolean isActivo() {
		return activo;
	}

	public void setActivo(boolean activo) {
		this.activo = activo;
	}

	public ProveedorTO getDTO() {
		ProveedorTO dto = new ProveedorTO();
		dto.setId(id);
		dto.setCuil(cuil);
		dto.setRazonSocial(razonSocial);
		for (ListaProveedor l : listas)
			dto.agregarLista(l.getDTO());
		dto.setActivo(activo);
		return dto;
	}

	public static Proveedor fromDTO(ProveedorTO dto) {
		if (dto == null)
			return null;
		Proveedor p = new Proveedor();
		p.setId(dto.getId());
		p.setCuil(dto.getCuil());
		p.setRazonSocial(dto.getRazonSocial());
		for (ListaProveedorTO l : dto.getListas())
			p.agregarLista(ListaProveedor.fromDTO(l));
		p.setActivo(dto.isActivo());
		return p;
	}

	@Override
	public int hashCode() {
		return id;
	}

	@Override
	public boolean equals(Object o) {
		if (o == this)
			return true;
		if (o != null && o instanceof Proveedor)
			return ((Proveedor) o).id == id;
		return false;
	}
}